According to IETF RFC 3416, “Version 2 of the Protocol Operations for the Simple Network Management Protocol (SNMP)”, in order to interact with a set of data elements in an SNMP-managed device, one sends to the device a Protocol Data Unit (PDU) consisting of the type of operation that one wishes to perform followed by a sequence of name-value pairs. The semantics of the PDU are that the operation should be performed on each of the named data elements using the value associated with the name.
There are two shortcomings of this semantics. First, the only operations allowed in RFC 3416 are the following:    GET    GET-NEXT    GET-BULK    RESPONSE    SET    INFORM    TRAP    REPORT
If one wishes to perform additional operations, one is obliged to create virtual variables. The virtual variables are then interacted with in order to cause the desired operation to take place.
The second shortcoming is that the same command must be used applied to all the name-value pairs in the PDU. If one wants to SET a variable before doing a GET on a second variable, two separate and distinct PDUs are required (i.e., two messages). This requires a greater amount of messaging and message processing, thereby consuming network (e.g., bandwidth) and processing (e.g., processing units and memory) resources.